package types

import "time"

// TextChunk 表示一个文本分片
type TextChunk struct {
	ID          string            `json:"id"`           // 分片唯一标识
	Content     string            `json:"content"`      // 分片内容
	StartLine   int               `json:"start_line"`   // 起始行号
	EndLine     int               `json:"end_line"`     // 结束行号
	ChunkIndex  int               `json:"chunk_index"`  // 分片索引
	SemanticTag string            `json:"semantic_tag"` // 语义标签
	Metadata    map[string]string `json:"metadata"`     // 元数据
	CreatedAt   time.Time         `json:"created_at"`   // 创建时间
}

// DocumentInfo 表示文档信息
type DocumentInfo struct {
	FilePath    string    `json:"file_path"`    // 文件路径
	FileName    string    `json:"file_name"`    // 文件名
	FileSize    int64     `json:"file_size"`    // 文件大小
	FileType    string    `json:"file_type"`    // 文件类型
	TotalLines  int       `json:"total_lines"`  // 总行数
	TotalChunks int       `json:"total_chunks"` // 总分片数
	ProcessedAt time.Time `json:"processed_at"` // 处理时间
	ProcessTime int64     `json:"process_time"` // 处理耗时(毫秒)
}

// SplitResult 表示分片结果
type SplitResult struct {
	Document *DocumentInfo `json:"document"` // 文档信息
	Chunks   []*TextChunk  `json:"chunks"`   // 分片列表
	Success  bool          `json:"success"`  // 是否成功
	Error    string        `json:"error"`    // 错误信息
}

// SplitConfig 表示分片配置
type SplitConfig struct {
	MaxChunkSize      int      `json:"max_chunk_size"`     // 最大分片大小(字符数)
	MinChunkSize      int      `json:"min_chunk_size"`     // 最小分片大小(字符数)
	OverlapSize       int      `json:"overlap_size"`       // 重叠大小(字符数)
	EnableSemantic    bool     `json:"enable_semantic"`    // 启用语义分析
	SemanticTags      []string `json:"semantic_tags"`      // 支持的语义标签
	PreserveParagraph bool     `json:"preserve_paragraph"` // 保持段落完整性
	RemoveEmptyLines  bool     `json:"remove_empty_lines"` // 移除空行
}

// DefaultSplitConfig 返回默认分片配置
func DefaultSplitConfig() *SplitConfig {
	return &SplitConfig{
		MaxChunkSize:      1000, // 1000字符
		MinChunkSize:      100,  // 100字符
		OverlapSize:       50,   // 50字符重叠
		EnableSemantic:    true,
		SemanticTags:      []string{"定义", "示例", "操作步骤", "注意事项", "说明", "规定", "条款", "附则"},
		PreserveParagraph: true,
		RemoveEmptyLines:  true,
	}
}

// FileParser 文件解析器接口
type FileParser interface {
	Parse(filePath string) (string, error)
	SupportedExtensions() []string
}

// TextSplitter 文本分片器接口
type TextSplitter interface {
	Split(content string, config *SplitConfig) (*SplitResult, error)
	SplitWithMetadata(content string, metadata map[string]string, config *SplitConfig) (*SplitResult, error)
}
